package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class Demo31 {
    public static void main(String[] args) {
        //ExecutorService threadpool= Executors.newFixedThreadPool(4);//创建固定数量的线程池
        ExecutorService threadpool=Executors.newCachedThreadPool();//线程可以无限增加
        for (int i = 0; i < 1000; i++) {
            int n=i;
            threadpool.submit(()->{
                System.out.println(n+" "+Thread.currentThread().getName());
            });
        }
        threadpool.shutdown();//等待所有任务都执行完 再结束所有线程
    }
}
/*corePoolSize: 正式员⼯的数量. (正式员⼯, ⼀旦录⽤, 永不辞退)
maximumPoolSize: 正式员⼯ + 临时⼯的数⽬. (临时⼯: ⼀段时间不⼲活, 就被辞退).
keepAliveTime: 临时⼯允许的空闲时间.
unit: keepaliveTime 的时间单位, 是秒, 分钟, 还是其他值.
workQueue: 传递任务的阻塞队列 调用submit就是在生产任务 线程池执行任务就是在消费任务
threadFactory: 创建线程的⼯⼚, 参与具体的创建线程⼯作. 通过不同线程⼯⼚创建出的线程相当于 对⼀些属性进⾏了不同的初始化设置.
RejectedExecutionHandler: 拒绝策略, 如果任务量超出公司的负荷了接下来怎么处理.
AbortPolicy(): 超过负荷, 直接抛出异常.
        CallerRunsPolicy(): 调⽤者负责处理多出来的任务.
DiscardOldestPolicy(): 丢弃队列中最⽼的任务.
DiscardPolicy(): 丢弃新来的任务.*/
